<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 你有可能(有意或无意地)创建一个函数的"间接引用"
        // 在这个情况下 调用这个函数会引用默认绑定规则
        // 间接引用最容易在赋值时发生
        function foo() {
            console.log(this.a);
        }
        var a = 2;
        var o = { a: 3, foo: foo };
        var p = { a: 4 };

        o.foo();
        // 赋值表达式p.foo = o.foo的返回值是目标函数的引用
        // 因此调用位置是foo() 而不是p.foo()或o.foo()
        // 这里是应用到了默认规则 找到了全局对象中的a = 2
        (p.foo = o.foo)();
    </script>
</body>
</html>
